
package TUILayer;

import ControlLayer.*;
import ModelLayer.DelOrdre;
import java.util.Scanner;

/**
 * @author (GP3 Product Solutions) 
 * @version (08-06-2011 THSS: Oprettelse af klassen)
 */

public class VaresalgUI 
{
    // instans variabler
    private Scanner reader;
    private HovedmenuUI hovedmenuUI;
    private OrdreRegisterCtrl ordreRegisterCtrl;
    
    /**
     * * Konstruktør for objekter af klassen Ordre
     */
    public VaresalgUI()
    {
    ordreRegisterCtrl = new OrdreRegisterCtrl();
    reader = new Scanner(System.in);
    }
    
    /**
     * Kalder startmetode med henblik på at generere menu
     */
    public void start()
    {
        varesalgMenu();
    }
    
    /**
     * Generere menuen for Varesalg
     * @return int menu valg
     */
    private int udskrivVaresalgMenu()
    {
        System.out.println("**Varesalg**");
        System.out.println("1  = Nyt salg");
        System.out.println("2  = Returvarer");
        System.out.println("3  = Find vare");
        System.out.println("4  = Hovedmenuen");
        
        int choise = reader.nextInt();
        return choise;
    }
    
    /**
     * Metode der starter udskrivVaresalgMenu
     */
     private void varesalgMenu()
    {
        boolean exit = false;
                while(!exit)
                {
                    int choise = udskrivVaresalgMenu(); 
                    switch (choise)
                    {
                        case 1: tilfoejVare();
                            break;
                        case 2: returVare();
                            break;
                        case 3: findVare();
                            break;
                        default: exit = true;
                            break;
                    }
                }
     }
     
     /**
      * Metodekald der tilføjer en vare til en ordre
      */
    private void tilfoejVare()
    {
        System.out.println("VareNR : ");
        int vareID = reader.nextInt();
        System.out.println("Antal : ");
        int antal = reader.nextInt();
        ordreRegisterCtrl.opretOrdre(vareID, antal);
        ordreRegisterCtrl.opdaterLager();
        tilfoejNyVare();
    }
    
    /**
     * Metode der kalder returvaremenuen
     */
    private void returVare()
    {
        // Her skal være en metode der håndtere returvare
        System.out.println("Dette kan desværre ikke lade sig gøre endnu");
    }
    
    /**
     * Metodekald der tilføjer en kunde til en ordre
     */
    private void kundeNR()
    {
        int ordreId = ordreRegisterCtrl.hentOrdreId();
        System.out.println("KundeNR (tlf) : ");
        int kundeNR = reader.nextInt();
        ordreRegisterCtrl.tilfoejPerson(kundeNR, ordreId);
        
    }

    /**
     * Metodekald der tilføjer et ean nummer til en ordre
     */
    private void eanNR()
    {
        int ordreId = ordreRegisterCtrl.hentOrdreId();
        System.out.println("EAN/CVR NR : ");
        Long eanNR = reader.nextLong();
        ordreRegisterCtrl.tilfoejEAN(eanNR, ordreId);
        tilKassen();
        
    }

    /**
     * Metode der genere valgmuligheder angående ordre
     */
    private void tilfoejNyVare()
    {   System.out.println("1   = Tilføj flere varer");
        System.out.println("2   = Betal almindelig");
        System.out.println("3   = Betal kunde");
        int valg = reader.nextInt();
        
        if(valg == 1)
        {
          tilfoejEnkeltVare();
        }
        
          else
            {
        
                if(valg == 2)
                {
                   tilKassen();
                } 
                  else
                  {
                     if(valg == 3)
                     {
                         tilKundeKassen();
                     }
                   }
            }
     }
    /**
     * Metodekald der tilføjer en vare til en ordre
     */
    private void tilfoejEnkeltVare()
     {
        System.out.println("VareNR : ");
        int vareID = reader.nextInt();
        System.out.println("Antal : ");
        int antal = reader.nextInt();
        ordreRegisterCtrl.tilfoejDelOrdre(vareID, antal);
        tilfoejNyVare();
     }
    
    /**
     * Metode der generere find vare menuen
     */
    private void findVare()
    {    boolean exit = false;
        System.out.println("1   = Søg vare");
        System.out.println("2   = Bestil");
        System.out.println("3   = Tilbage");
                
    
         while(!exit)
         {
         int choise = reader.nextInt();
        
         switch (choise)
         {
                        
            case 1: hentVareBeskrivelse();
                break;
            case 2: bestil();
                break;
            default: exit = true;
                break;
         }
         }
                         
                            
    }
     
    /**
     * Metodekald der henter en VareBeskrivelse
     */
     private void hentVareBeskrivelse()
     {
         System.out.println("Indtast varenavn : ");
         String vareNavn = reader.next();
         ordreRegisterCtrl.findVareBeskrivelse(vareNavn);
         System.out.println(ordreRegisterCtrl.findVareBeskrivelse(vareNavn));
     }
     
     /**
      * Metode der generere menuen til at betjene en eksisterende kunde ved kassen
      */
     private void tilKundeKassen()
     {
        int ordreId = ordreRegisterCtrl.hentOrdreId();
        kundeNR();
        double total = ordreRegisterCtrl.udregnOrdreTotal(ordreId);
        System.out.println("I alt at betale: "+ total);
        System.out.println("1   = Godkend og betal");
        System.out.println("2   = Afbryd køb");
        int valg = reader.nextInt();

        if(valg == 1)
        {
          betalKunde();
        }
          else
            {
              if(valg == 2)
                {
                    start();
                } 
            } //end else 
     } //end method
     
     /**
      * Metode der generere menuen til at betjene en almindelig kunde
      */
     private void tilKassen()
     {
        int ordreId = ordreRegisterCtrl.hentOrdreId();
        double total = ordreRegisterCtrl.udregnOrdreTotal(ordreId);
        System.out.println("I alt at betale: "+ total);
        System.out.println("");
        System.out.println("1   = Godkend og betal");
        System.out.println("2   = Tilføj EAN/CVR");
        System.out.println("3   = Afbryd køb");
        int valg = reader.nextInt();

        if(valg == 1)
        {
          betal();
        }
          else
            {
                if(valg == 2)
                {
                    eanNR();
                }
                else
                {
                    if(valg == 3)
                    {
                     start();
                    } 
            } //end else 
         }//end else 
     } //end method
     
     /**
      * Metode der simulere en betaling for en almindelig kunde, opdatere lageret og nulstiller en ordre
      */
     private void betal()
     {
         //her åbnes dankort automat eller pengekassen
         System.out.println("Betaling gennemført");
         ordreRegisterCtrl.opdaterLager();
         udskrivFaktura();
         ordreRegisterCtrl.nulstilOrdre();
     }
     
     /**
      * Metode der simulere en betaling for en eksisterende kunde, opdatere lageret og nulstiller en ordre
      */
     private void betalKunde()
     {
         System.out.println("Betaling gennemført");
         ordreRegisterCtrl.opdaterLager();
         udskrivKundeFaktura();
         ordreRegisterCtrl.nulstilOrdre();
     }
     
     /**
      * Metode der udskriver en faktura til en eksisterende kunde
      */
     private void udskrivKundeFaktura()
     {
        int ordreId = ordreRegisterCtrl.hentOrdreId();
       
        double ordTotal = ordreRegisterCtrl.udregnOrdreTotal(ordreId);
        String kundeNavn = ordreRegisterCtrl.hentPerson(ordreId).getNavn();
        String adresse = ordreRegisterCtrl.hentPerson(ordreId).getAdresse();
        int tlf = ordreRegisterCtrl.hentPerson(ordreId).getTlf();
       
        
        System.out.println("");
        System.out.println("**Vestbjerg Byggecenter A/S**");
        System.out.println("Faktura");
        System.out.println("");
        System.out.println(kundeNavn);
        System.out.println(adresse);
        System.out.println(tlf);
        System.out.println("");
        System.out.println("vare"+"         "+"pris     "+"    antal"+"       total");
        for(DelOrdre delOrdren : ordreRegisterCtrl.hentDelOrdreListe(ordreId))
        {
            String vareNavn = delOrdren.hentDelOrdreVareNavn();
            double varePris = delOrdren.hentDelOrdreVarePris();
            int antal = delOrdren.hentDelOrdreAntal();
            double delTotal = delOrdren.udregnTotal();
            System.out.println(vareNavn+"       "+varePris+"    "+"    "+antal+"    "+ delTotal);
        }
        System.out.println("---------------------------------------------------------------");
        System.out.println("I alt                                               "+ordTotal);
        System.out.println("---------------------------------------------------------------");
        System.out.println();  
     }
     /**
      * Metode der udskriver en faktura til en eksisterende kunde
      */
     private void udskrivFaktura()
     {
         int ordreId = ordreRegisterCtrl.hentOrdreId();
         Long ean = null;
         if(ordreRegisterCtrl.hentEAN(ordreId) !=null)
         {
             ean = ordreRegisterCtrl.hentEAN(ordreId);
         }
         else
     {
         ean = null;
     }     
        double ordTotal = ordreRegisterCtrl.udregnOrdreTotal(ordreId);
            
        System.out.println("");
        System.out.println("**Vestbjerg Byggecenter A/S**");
        System.out.println("Faktura");
        System.out.println("");
        System.out.println("EAN/CVR:    "+ean);
        System.out.println("");
        System.out.println("vare"+"         "+"pris     "+"    antal"+"       total");
        for(DelOrdre delOrdren : ordreRegisterCtrl.hentDelOrdreListe(ordreId))
        {
            String vareNavn = delOrdren.hentDelOrdreVareNavn();
            double varePris = delOrdren.hentDelOrdreVarePris();
            int antal = delOrdren.hentDelOrdreAntal();
            double delTotal = delOrdren.udregnTotal();
            System.out.println(vareNavn+"       "+varePris+"    "+"    "+antal+"    "+ delTotal);
        }
        System.out.println("---------------------------------------------------------------");
        System.out.println("I alt                                               "+ordTotal);
        System.out.println("---------------------------------------------------------------");
        System.out.println();
     }
     
     /**
      * Metode til at bestille en given vare hjem
      */
     public void bestil()
     {
         System.out.println("Dette kan desværre ikke lade sig gøre endnu");
         // denne metode er ikke implementeret
     }   
}